using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using Infragistics.Win.UltraWinGrid;

namespace PluginFrame
{
	public interface IConfigurationService
	{
		Dictionary<InstrumentType, List<int>[]> InstrumentSubModules { get; set; }

		string InstrumentName { get; set; }

		bool IsOffLine { get; set; }

		double MinReactionVolume { get; set; }

		double MaxReactionVolume { get; set; }

		double DefualtReactionVolume { get; set; }

		string PortName { get; set; }

		int BaudRate { get; set; }

		Parity Parity { get; set; }

		StopBits StopBits { get; set; }

		int DataBits { get; set; }

		string SerialPortDeviceName { get; set; }

		bool IsAutoSearch { get; set; }

		int AutoSearchPortCount { get; set; }

		int WriteBufferSize { get; set; }

		int ReadBufferSize { get; set; }

		int QueryDelayTime { get; set; }

		int QueryRetryTime { get; set; }

		int OrderFrameCount { get; set; }

		byte OrderFrameHead { get; set; }

		byte OrderFrameEnd { get; set; }

		int OrderFrameRepeatCount { get; set; }

		int OrderFrameEndRepeatCount { get; set; }

		int LightDataLength { get; set; }

		double ADFactor { get; set; }

		double HotLidTemperature { get; set; }

		int ExperimentPollingTime { get; set; }

		int StartDelaySecond { get; set; }

		int CloseHotLidDelaySecond { get; set; }

		int DataFrameWithoutLightCount { get; set; }

		int DetectOrderSecond { get; set; }

		int AverageTemperatureLength { get; set; }

		double TemperatureReachDeviation { get; set; }

		double StepHRMTemperatureReachDeviation { get; set; }

		double TemperatureUniformityDeviation { get; set; }

		double HoldingUniformityDeviation { get; set; }

		double TemperatureVariationDeviation { get; set; }

		double MaxBlockTemperature { get; set; }

		double MaxHotLidTemperature { get; set; }

		double MinHotLidTemperature { get; set; }

		int HotLidTemperatureArriveTime { get; set; }

		int TemperatureArriveTimeDelay { get; set; }

		double MaxTemperatureRate { get; set; }

		int PollingNoDataTime { get; set; }

		int PcrFileExperimentAutoSaveSecond { get; set; }

		int ModuleCount { get; set; }

		int CellCountInModule { get; set; }

		int SubModuleCount { get; set; }

		int SubModuleRow { get; set; }

		int SubModuleCol { get; set; }

		int GridLineRowInterval { get; set; }

		int GridLineColInterval { get; set; }

		int ChannelCount { get; }

		int ModuleRow { get; set; }

		int ModuleCol { get; set; }

		double SplitterHorizontalDragMaxRate { get; set; }

		double SplitterHorizontalMinRate { get; set; }

		double SplitterHorizontalMaxRate { get; set; }

		double SplitterVerticalMinRate { get; set; }

		double SplitterVerticalMaxRate { get; set; }

		double SplitterVerticalDefaultRate { get; set; }

		double SplitterHorizontalDefaultRate { get; set; }

		string QuantitativeResultUnit { get; set; }

		string QualitativeResultUnit { get; set; }

		double QuantitativeThreshold { get; set; }

		double QualitativeThreshold { get; set; }

		string DataFileDefaultFolder { get; set; }

		string ProjectFileDefaultFolder { get; set; }

		string ReportFileDefaultFolder { get; set; }

		string IconFileDefaultFolder { get; set; }

		string PcrCfgFileDefaultFolder { get; set; }

		string TemporaryPcrDataFolder { get; set; }

		string CurrentDataFileFolder { get; set; }

		string CurrentExportFolder { get; set; }

		string DefaultExperimentDataFile { get; set; }

		string StandardCurveDataFolder { get; set; }

		string ResourceFolder { get; set; }

		int DefaultScreenHight { get; set; }

		int DefaultScreenWidth { get; set; }

		int TmpPcrFileCount { get; set; }

		int SaveInformationGridSecond { get; set; }

		int RealTimeRawCurveLightFactor { get; set; }

		bool DefaultUseHotLid { get; set; }

		int MaxExperimentNameLength { get; set; }

		DataTable PcrSystemTypeTable { get; }

		int[] WellPositionConverter { get; }

		int[] CellIDToScanID { get; }

		bool IsDisplayHotlidTemperature { get; set; }

		TemperatureControlType DefaultTemperatureControlType { get; set; }

		string CurrentNewFileKey { get; set; }

		string VersionKey { get; set; }

		ITemperatureCurveConfiguration TemperatureCurveConfiguration { get; }

		ILightCurveConfiguration RawLightCurveConfiguration { get; }

		ILightCurveConfiguration AmplificationLightCurveConfiguration { get; }

		IAnalysisAlgorithmConfiguration AnalysisConfiguration { get; }

		IStandardCurveConfiguration StandardCurveConfiguration { get; }

		IPrintConfiguration PrintConfiguration { get; }

		ITubeTemperatureConfiguration TubeTemperatureConfiguration { get; }

		IRunMeasuementConfiguration RunMeasuementConfiguration { get; }

		IProjectConfiguration ProjectConfiguration { get; }

		IAlleleProjectConfiguration AlleleProjectConfiguration { get; }

		IHRMProjectConfiguration HRMProjectConfiguration { get; }

		Dictionary<string, UltraGridColumn> ColumnConfiguration { get; }

		IPcrProgramConfiguration PcrProgramConfiguration { get; }

		List<Color> SelectedCurveColor { get; }

		List<Color> ChannelCurveColor { get; }

		List<IStaffConfiguration> OperatorStaffList { get; }

		List<IStaffConfiguration> AssessorStaffList { get; }

		IStaffConfiguration DefaultOperator { get; set; }

		IStaffConfiguration DefaultAssessor { get; set; }

		int MaxOpenPcrFileCount { get; set; }

		InstrumentType DefaultInstrumentType { get; set; }

		IExperimentReagentGridConfiguration ReagentSetupGridConfiguration { get; }

		bool[] ModuleUseHotLid { get; set; }

		bool IsDetectSlider { get; set; }

		LanguageStrings UICultureString { get; set; }

		Dictionary<LanguageStrings, string> LanguageStringDictionary { get; }

		Dictionary<ColumnClassification, string> ColumnClassificationDictionary { get; }

		Dictionary<ColumnType, string> ColumnTypeDictionary { get; }

		string LabelString { get; set; }

		bool IsLabelIncrease { get; set; }

		int LabelStartValue { get; set; }

		int LabelInterval { get; set; }

		int LabelBits { get; set; }

		string MeltingHoldTime { get; set; }

		string HRMHoldTime { get; set; }

		double MeltingStepInterval { get; set; }

		double HRMStepInterval { get; set; }

		double MaxCrossTalkValue { get; set; }

		Dictionary<PcrSystemType, List<string>> PcrTypeTabViewKey { get; }

		CellDisplaySortStyle CellDisplaySortStyle { get; set; }

		CellDisplaySortStyle MultiTubeCellPlaceStyle { get; set; }

		bool IsShowProjectPreview { get; set; }

		bool IsDefaultImportTemplate { get; set; }

		string DefaultTemplateFileName { get; set; }

		bool IsDefaultUsePcrModuleA { get; set; }

		bool IsDefaultUsePcrModuleB { get; set; }

		string Version { get; set; }

		double DefaultMeltingStartTemperature { get; set; }

		double DefaultMeltingStopTemperature { get; set; }

		bool IsExportRawData { get; set; }

		bool IsHideParameterPanel { get; set; }

		ProjectAuthorizationEnum ProjectAuthorization { get; set; }

		int RuleOptionFormWidth { get; set; }

		int RuleOptionFormHeight { get; set; }

		bool EnableTemperatureCompensation { get; set; }

		bool IsSetCtThreshold { get; set; }

		int CtThreshold { get; set; }

		int BlockDigit { get; set; }

		int TubeDigit { get; set; }

		int HotlidDigit { get; set; }

		LightScanStyle DefaultScanStyle { get; set; }

		string BlockTemperatureFormat { get; }

		string TubeTemperatureFormat { get; }

		string HotlidTemperatureFormat { get; }

		CurveColorStyle CurveColorStyle { get; set; }

		IUserConfiguration CurrentUser { get; set; }

		IUserConfiguration DefaultUser { get; set; }

		List<IUserConfiguration> Users { get; set; }

		IAllelePointsConfiguration AllelePointsConfiguration { get; set; }

		IMeltingCurveConfiguration MeltingCurveConfiguration { get; set; }

		PcrSystemType DefaultPcrSystemType { get; set; }

		PcrSystemType DefaultProjectType { get; set; }

		PcrSystemType DefaultProjectViewType { get; set; }

		void SetLanguageCulture(LanguageStrings languageString);

		void SaveConfiguration();

		void LoadConfiguration();

		DataTable GetModuleOptionTable();

		IChannelConfiguration[] ChannelConfigurations();

		IChannelConfiguration ChannelConfiguration(int index);

		IChannelConfiguration GetDefaultChannelConfiguration(int index);

		Dictionary<string, UltraGridColumn> CopyColumnConfiguration(bool isFullCopy, Dictionary<string, UltraGridColumn> sourceColumns, PcrSystemType systemType);

		IColumn CreateColumn(string columnName, string displayName, ColumnType type, ColumnClassification classification, ColumnPosition position, ColumnShow show, List<string> list, int defaultWidth, ColumnFilterType filterType);

		IProjectProperty CreateAbsoluteProjectProperty(string name, string comment, double quantitativeThreshold, double qualitativeThreshold, string qualitativeResultUnit, string quantitativeResultUnit, bool isSetQuantitativeGreyZone, bool isSetQualitativeGreyZone, double quantitativeGreyZones, double qualitativeGreyZones);

		IAbsoluteAnalysisParameterConfiguration CreateAbsoluteAnalysisParameterConfiguration(string itemName, int startBaseline, int stopBaseline, bool isAutoThreshold, double manualThreshold, BaselineOptimization baselineOptimization, AbsoluteAnalysisType aanalysisType, bool isDigitalFilter, IPcrExperimentProject project, int targetIndex);

		IAbsoluteAnalysisParameterConfiguration CreateAbsoluteAnalysisParameterConfiguration(string itemName, int targetIndex, IPcrExperimentProject project);

		IAlleleAnalysisParameterConfiguration CreateAlleleAnalysisParameterConfiguration(string itemName, int startBaseline, int stopBaseline, bool isAutoThreshold, double manualThreshold, BaselineOptimization baselineOptimization, AlleleAnalysisType alleleAnalysisType, bool isDigitalFilter, IPcrExperimentProject project, int targetIndex, double quality, double gainRatio);

		IAlleleAnalysisParameterConfiguration CreateAlleleAnalysisParameterConfiguration(string targetName, IPcrExperimentProject project);

		IMeltingAnalysisParameterConfiguration CreateMeltingAnalysisParameterConfiguration(string itemName, double minTemperature, double maxTemperature, double noiseThreshold, double qualityFactor, MeltingAnalysisType meltingAnalysisType, PcrSystemType systemType, IPcrExperimentProject project, int targetIndex);

		IHRMAnalysisParameterConfiguration CreateHRMAnalysisParameterConfiguration(string itemName, double startTemperatureBeforeMelting, double stopTemperatureBeforeMelting, double startTemperatureAfterMelting, double stopTemperatureAfterMelting, double shiftThreshold, double sensitivity, double noiseThreshold, double qualityFactor, HRMAnalysisType hrmAnalysisType, PcrSystemType systemType, HRMAnalysisMethod analysisMethod, int manualTypeCount, IPcrExperimentProject project, int targetIndex);

		IHRMAnalysisParameterConfiguration CreateHRMAnalysisParameterConfiguration(string targetName, int targetIndex, IPcrExperimentProject project);

		List<IProjectProperty> CopyProjectProperty(List<IProjectProperty> sourceProjectProperty, PcrSystemType systemType);

		string GetModuleNameFromID(int moduleID);

		int GetModuleIDFromName(string moduleName);

		Dictionary<int, ICellIDPositionMap> GetCellIDPositionMapDictionary();

		Dictionary<string, ICellIDPositionMap> GetCellPositionToIDMapDictionary();

		Color GetDetectionTypeColor(string detectionType);

		string[] GetDetectionTypeArray(PcrSystemType pcrSystemType);

		Dictionary<string, int> GetAbsoluteReplicatedOrder();

		List<string> GetResultColumnKeys(PcrSystemType systemType);

		IStaffConfiguration CreateOperatorStaff(string label, string name, string remark);

		IStaffConfiguration CreateAssessorStaff(string label, string name, string remark);

		IUserConfiguration CreateUser(string label, string name, string remark, string password, string directory, string dataDirectory, string configurationDirectory, string projectDirectory, string reportDirectory);

		string AddUser(IUserConfiguration user);

		void AddOperator(IStaffConfiguration operatorStaff);

		void AddAssessor(IStaffConfiguration assessorStaff);

		List<string> GetColumnList();

		IChannelConfiguration FindSystemChannelConfiguration(string dye);

		string FindSystemTypeString(PcrSystemType systemType);

		int CalculateTubeLevel(int tubeVolumn);

		void SaveUserConfiguration();

		AbsoluteAnalysisType GetAbsoluteAnalysisType(string analysisTypeString);
	}
}
